package br.sgd.model.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.sgd.model.beans.Usuario;
import br.sgd.utils.HibernateUtil;

public class UsuarioDao {

	public void salvar(Usuario usuario){
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		session.saveOrUpdate(usuario);
		tx.commit();
		session.close();
	}

	public void excluir(Usuario usuario){
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		session.delete(usuario);
		tx.commit();
		session.close();
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> listarTodos() {
		Session session = HibernateUtil.getSession();
		try {
			return session.createCriteria(Usuario.class).addOrder(Order.desc("usuario")).list();
		} finally {
			session.close();
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> filtrar(Usuario usuario) {
		Session session = HibernateUtil.getSession();
		try {
			Criteria criteria = session.createCriteria(Usuario.class).addOrder(Order.desc("usuario"));
			if(usuario.getNome()!=null && !usuario.getNome().equals("")) criteria.add(Restrictions.ilike("nome", "%"+usuario.getNome()+"%"));
			if(usuario.getUsuario()!=null && !usuario.getUsuario().equals("")) criteria.add(Restrictions.ilike("usuario", "%"+usuario.getUsuario()+"%"));
	
			return criteria.list();
		} finally {
			session.close();
		}
	}
	

	public Usuario buscarPorUsuario(String usuario) {
		Session session = HibernateUtil.getSession();
		try {
			Criteria criteria = session.createCriteria(Usuario.class);
			if(usuario!=null && !usuario.equals("")) criteria.add(Restrictions.eq("usuario", usuario));

	
			return (Usuario) criteria.uniqueResult();
		} finally {
			session.close();
		}
	}
}
